package mymyoux.events
{
	import flash.events.Event;
	
	import mymyoux.core.IObject;
	/**
	 * AMFPHPEvent est dispatché par AMFPHP lorsque PHP renvoie un résultat ou une erreur.
	 * @author Mymyoux
	 * @version 2.0
	 */
	public class AMFPHPEvent extends Event implements IStaticListenable, IObject
	{
		/**
		 * @private
		 */
		protected var _success:Boolean;
		/**
		 * @private
		 */
		protected var _value:*;
		/**
		 * Crée un objet de type AMFPHPEvent.
		 * @param name Nom de la fonction appelée.
		 * @param value Valeur renvoyée par PHP ou code de l'erreur.
		 * @param isError Indique si c'est l'appel à la fonction a échoué.
		 * @param bubbles Determines whether the Event object participates in the bubbling stage of the event flow. The default value is false.
		 * @param cancelable Determines whether the Event object can be canceled. The default values is false.
		 */
		public function AMFPHPEvent(methodName:String, value:*, isError:Boolean=false,bubbles:Boolean=false, cancelable:Boolean=false)
		{
			
			super(methodName, bubbles, cancelable);
			_success=!isError;
			_value=value;
		}
		/**
		 * Valeur renvoyée par PHP ou code de l'erreur.
		 */
		public function get value():*
		{
			return _value;
		}
		/**
		 * Nom de la fonction appelée.
		 */
		public function get name():String
		{
			return type;
		}
		/**
		 * Nom de la fonction appelée.
		 */
		public function get methodName():String
		{
			return type;
		}
		/**
		 * Indique si l'appel à la fonction PHP a réussi.
		 */
		public function get success():Boolean
		{
			return _success;
		}
		//utile parfois
		public function set success(value:Boolean):void
		{
			_success=value;
		}
		/**
		 * Indique si l'appel à la fonction PHP a échoué.
		 */
		public function get isError():Boolean
		{
			return !_success;
		}
		 /**
		 * @copy mymyoux.core.IObject#toString()
		 */
		 public override function toString():String{
		 	return "[AMFPHPEvent method=\""+type+"\" sucess=\""+_success+"\" value=\""+_value+"\"]";
		 }
		 /**
		 * @inheritDoc 
		 */
		 public override function clone():Event
		 {
		 	return new AMFPHPEvent(type,_value,!_success,bubbles,cancelable);
		 }
		 /**
		 * @inheritDoc 
		 */
		 public function destroy():void
		 {
		 	//pour l'implémentation de IObject.
		 }
		  /**
		 * @inheritDoc 
		 */
		 public function equals(objet:IObject):Boolean
		 {
		 	try{
		 		var obj:AMFPHPEvent=objet as AMFPHPEvent;
		 		if(obj==null)
		 			return false;
		 		if(obj.methodName!=type || obj.success!=_success || obj.value!=_value)
		 			return false;
		 	}catch(error:Error)
		 	{
		 		return false;
		 	}
		 	return true;
		 }
		
	}
}